package chapter05

/**
 * Created with IntelliJ IDEA.
 * ClassName: Test06_HightFun
 * Package: chapter05
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 *          Date: 2023-06-19
 *          Time: 17:07
 */

object Test06_HighFun {
  def main(args: Array[String]): Unit = {

    //简单的函数声明和调用
    def f(n: Int): Int = {
      println("f调用")
      n + 1
    }

    val result: Int = f(123)
    println(result)

    //1.高阶函数 函数作为值进行传递
    val f1: Int => Int = f
    //上下效果等同 f空格下划线 表示我要的是这个函数整体 赋值给 f2
    val f2 = f _
    println(f1) //chapter05.Test06_HighFun$$$Lambda$5/532445947@4cdbe50f
    println(f1(12)) //f调用 13
    println(f2)
    println(f2(23))

    //2.函数作为参数传递
    //定义 数值和操作都不定义死的函数
    def dualEval(op: (Int, Int) => Int, a: Int, b: Int) = {
      op(a, b)
    }

    def add(a: Int, b: Int): Int = {
      a + b
    }

    println(dualEval(add, 12, 35))
    println(dualEval((a, b) => a + b, 12, 35))
    println(dualEval(_ + _, 12, 35))

    //3.函数作为函数的返回值返回
    def f5(): Int => Unit = {
      def f6(a: Int): Unit = {
        println("f6调用 " + a)
      }
      f6
    }
    val  f6 = f5()
    println(f5())
    println(f6(25))


  }
}
